package server;

import client.MapleCharacter;
import constants.ServerConstants;
import constants.WorldConstants;
import database.DatabaseConnection;
import handling.CashShopOpcode;
import handling.InteractionOpcode;
import handling.RecvPacketOpcode;
import handling.SendPacketOpcode;
import handling.channel.ChannelServer;
import handling.world.WorldBroadcastService;
import java.awt.HeadlessException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ScheduledFuture;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import scripting.portal.PortalScriptManager;
import scripting.reactor.ReactorScriptManager;
import server.shop.MapleShopFactory;
import tools.FileoutputUtil;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.packet.NPCPacket;

/**
 *
 * @author Fairyms
 */
public class ManagerSin extends javax.swing.JFrame {

    public static int exp[] = new int[20];
    public static int meso[] = new int[20];
    public static int drop[] = new int[20];
    //public int wid[] = new int[20];

    /**
     * Creates new form ManagerSin
     */
    public ManagerSin() {

        Connection con = DatabaseConnection.getConnection();
        try {
            try (PreparedStatement ps = con.prepareStatement("SELECT * FROM accounts");
                    ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    initInformation(rs);
                }
                rs.close();
                ps.close();
            }
        } catch (SQLException ex) {
            FileoutputUtil.log("Failed to load npc name data. " + ex);
        }

        initComponents();
        setData();
        setworld();
    }

    public int exp(int w) {
        int i;
        for (i = 0; i < wid.getItemCount(); i++) {
            int ttt = Integer.parseInt(String.valueOf(wid.getItemAt(i)));
            if (w == ttt) {
                //FileoutputUtil.log("经验倍率："+ exp[i]+" " + ttt );
                break;
            }
        }

        return exp[i];
    }

    public int meso(int w) {
        int i;

        for (i = 0; i < wid.getItemCount(); i++) {
            int ttt = Integer.parseInt(String.valueOf(wid.getItemAt(i)));
            if (w == ttt) {
                //FileoutputUtil.log("金币爆率："+ meso[i]+" " + ttt );
                break;
            }
        }
        return meso[i];
    }

    public int drop(int w) {
        int i;
        for (i = 0; i < wid.getItemCount(); i++) {
            int ttt = Integer.parseInt(String.valueOf(wid.getItemAt(i)));
            if (w == ttt) {
                //FileoutputUtil.log("物品爆率："+ drop[i]+" " + ttt );
                break;
            }
        }
        return drop[i];
    }

    public void initInformation(ResultSet sqlItemData) throws SQLException {
        /*this.id = sqlItemData.getInt("id");
         this.name = sqlItemData.getInt("name");
         this.pasw = sqlItemData.getString("password");
         this.nxCredit = sqlItemData.getString("nxCredit");
         this.loggedin = sqlItemData.getString("loggedin");*/
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 32767));
        jLabel14 = new javax.swing.JLabel();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jButton4 = new javax.swing.JButton();
        exprate = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jButton7 = new javax.swing.JButton();
        mesorate = new javax.swing.JTextField();
        jLabel15 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        servermessage = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jLabel11 = new javax.swing.JLabel();
        noticeContent = new javax.swing.JTextField();
        jButton6 = new javax.swing.JButton();
        jButton23 = new javax.swing.JButton();
        jButton24 = new javax.swing.JButton();
        jButton21 = new javax.swing.JButton();
        jLabel17 = new javax.swing.JLabel();
        droprate = new javax.swing.JTextField();
        jButton22 = new javax.swing.JButton();
        jButton13 = new javax.swing.JButton();
        jButton14 = new javax.swing.JButton();
        jButton12 = new javax.swing.JButton();
        jButton17 = new javax.swing.JButton();
        jButton16 = new javax.swing.JButton();
        jLabel13 = new javax.swing.JLabel();
        jButton19 = new javax.swing.JButton();
        jButton18 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jButton11 = new javax.swing.JButton();
        jButton10 = new javax.swing.JButton();
        jLabel12 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        itemList = new javax.swing.JList();
        jButton3 = new javax.swing.JButton();
        beAdd = new javax.swing.JTextField();
        jScrollPane7 = new javax.swing.JScrollPane();
        chatlog = new javax.swing.JTextPane();
        jLabel22 = new javax.swing.JLabel();
        wworld = new javax.swing.JComboBox();
        jLabel16 = new javax.swing.JLabel();
        wid = new javax.swing.JComboBox();
        jLabel18 = new javax.swing.JLabel();
        jButton8 = new javax.swing.JButton();
        badd2 = new javax.swing.JTextField();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton9 = new javax.swing.JButton();
        jButton15 = new javax.swing.JButton();
        jButton20 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("服务端管理工具");
        setBackground(new java.awt.Color(255, 255, 255));
        setName("MSJW"); // NOI18N
        setResizable(false);
        setType(java.awt.Window.Type.POPUP);

        jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel14.setText("Generated Code write by NetBeans IDE.This ServerManager that made for MapleDEV");

        jButton4.setText("修改");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        exprate.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));

        jLabel4.setText("物品暴率");

        jLabel5.setText("倍");

        jLabel2.setText("经验暴率");

        jLabel3.setText("倍");

        jButton1.setText("修改");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("修改");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jLabel6.setText("金币暴率");

        jLabel7.setText("倍");

        jButton7.setText("弹出");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });

        mesorate.setToolTipText("");

        jLabel15.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel15.setText("玩家操作（选择列表玩家进行）");

        jLabel8.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel8.setText("消息相关");
        jLabel8.setToolTipText("");

        jTextField1.setText("物品代码");

        jLabel10.setText("服务器公告");

        jTextField2.setText("数量");

        jButton5.setText("变更");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jLabel11.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel11.setText("游戏公告");

        jButton6.setText("公告");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jButton23.setText("保存数据");
        jButton23.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton23ActionPerformed(evt);
            }
        });

        jButton24.setText("关闭服务器");
        jButton24.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton24ActionPerformed(evt);
            }
        });

        jButton21.setText("发送物品");
        jButton21.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton21ActionPerformed(evt);
            }
        });

        jLabel17.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel17.setText("服务器管理");
        jLabel17.setToolTipText("");

        jButton22.setText("在线玩家数");
        jButton22.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton22ActionPerformed(evt);
            }
        });

        jButton13.setText("给予全服");
        jButton13.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton13ActionPerformed(evt);
            }
        });

        jButton14.setText("初始化列表");
        jButton14.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton14ActionPerformed(evt);
            }
        });

        jButton12.setText("删除选择项");
        jButton12.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton12ActionPerformed(evt);
            }
        });

        jButton17.setText("Portal 脚本");
        jButton17.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton17ActionPerformed(evt);
            }
        });

        jButton16.setText("物品掉落");
        jButton16.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton16ActionPerformed(evt);
            }
        });

        jLabel13.setFont(new java.awt.Font("굴림", 1, 12)); // NOI18N
        jLabel13.setText("重置（更新）");

        jButton19.setText("Event 脚本");
        jButton19.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton19ActionPerformed(evt);
            }
        });

        jButton18.setText("商店");
        jButton18.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton18ActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel1.setText("修改暴率");
        jLabel1.setToolTipText("");

        jButton11.setText("NPC");
        jButton11.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton11ActionPerformed(evt);
            }
        });

        jButton10.setText("信息");
        jButton10.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton10ActionPerformed(evt);
            }
        });

        jLabel12.setText("Item List (项目列表)");

        jLabel9.setFont(new java.awt.Font("굴림", 1, 12)); // NOI18N
        jLabel9.setText("Progress Event");

        itemList.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "< 项目, 数量 >" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        itemList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(itemList);

        jButton3.setText("添加到列表");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        beAdd.setText("物品代码");

        chatlog.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
        chatlog.setEnabled(false);
        jScrollPane7.setViewportView(chatlog);

        jLabel22.setFont(new java.awt.Font("宋体", 1, 12)); // NOI18N
        jLabel22.setText("消息记录");

        wworld.setToolTipText("");
        wworld.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                wworldItemStateChanged(evt);
            }
        });

        jLabel16.setText("选择大区");

        wid.setEnabled(false);

        jLabel18.setText("ID:");

        jButton8.setText("清空记录");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });

        badd2.setText("数量");

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "AID", "角色名", "等级", "职业", "当前位置"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        jScrollPane2.setViewportView(jTable1);
        if (jTable1.getColumnModel().getColumnCount() > 0) {
            jTable1.getColumnModel().getColumn(0).setMinWidth(50);
            jTable1.getColumnModel().getColumn(0).setPreferredWidth(50);
            jTable1.getColumnModel().getColumn(0).setMaxWidth(50);
            jTable1.getColumnModel().getColumn(1).setMinWidth(110);
            jTable1.getColumnModel().getColumn(1).setPreferredWidth(110);
            jTable1.getColumnModel().getColumn(1).setMaxWidth(110);
            jTable1.getColumnModel().getColumn(2).setMinWidth(40);
            jTable1.getColumnModel().getColumn(2).setPreferredWidth(40);
            jTable1.getColumnModel().getColumn(2).setMaxWidth(40);
            jTable1.getColumnModel().getColumn(4).setPreferredWidth(200);
        }

        jButton9.setText("踢下线");
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed(evt);
            }
        });

        jButton15.setText("封包头");
        jButton15.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton15ActionPerformed(evt);
            }
        });

        jButton20.setText("给点卷");
        jButton20.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton20ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                            .addGap(6, 6, 6)
                            .addComponent(jButton6)
                            .addGap(14, 14, 14)
                            .addComponent(jButton7)
                            .addGap(18, 18, 18)
                            .addComponent(jButton10)
                            .addGap(18, 18, 18)
                            .addComponent(jButton11)
                            .addGap(18, 18, 18)
                            .addComponent(jButton8)
                            .addGap(31, 31, 31))
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addGap(5, 5, 5)
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
                                                    .addComponent(jLabel2)
                                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                    .addComponent(exprate)
                                                    .addGap(9, 9, 9)
                                                    .addComponent(jLabel3)
                                                    .addGap(11, 11, 11)
                                                    .addComponent(jButton1))
                                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
                                                    .addComponent(jLabel4)
                                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                    .addComponent(droprate, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                    .addGap(8, 8, 8)
                                                    .addComponent(jLabel5)
                                                    .addGap(12, 12, 12)
                                                    .addComponent(jButton2)))
                                            .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addComponent(jLabel6)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(mesorate, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(8, 8, 8)
                                                .addComponent(jLabel7)
                                                .addGap(12, 12, 12)
                                                .addComponent(jButton4)))
                                        .addGap(166, 166, 166)))
                                .addGroup(jPanel1Layout.createSequentialGroup()
                                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(jPanel1Layout.createSequentialGroup()
                                            .addComponent(jLabel16)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                            .addComponent(wworld, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                            .addComponent(jLabel18)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                            .addComponent(wid, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGroup(jPanel1Layout.createSequentialGroup()
                                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                                .addGroup(jPanel1Layout.createSequentialGroup()
                                                    .addGap(2, 2, 2)
                                                    .addComponent(jLabel10))
                                                .addGroup(jPanel1Layout.createSequentialGroup()
                                                    .addGap(3, 3, 3)
                                                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                        .addComponent(servermessage, javax.swing.GroupLayout.PREFERRED_SIZE, 306, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                        .addComponent(jLabel11))))
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                            .addComponent(jButton5)))
                                    .addGap(31, 31, 31)))))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(1, 1, 1)
                                .addComponent(jLabel22))
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(noticeContent, javax.swing.GroupLayout.PREFERRED_SIZE, 385, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jScrollPane7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 390, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel1)
                                .addGap(223, 223, 223)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jButton19, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(jButton17, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jButton16, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabel13)
                                        .addComponent(jButton18, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(jButton15, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel12)
                            .addComponent(jLabel9)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(26, 26, 26)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton13, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton20, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(7, 7, 7)
                                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(jButton21)))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(30, 30, 30)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jLabel17)
                                    .addComponent(jButton22, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton24, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton23, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jButton9, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addComponent(jLabel15)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 408, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(beAdd, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(badd2, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(jLabel13, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(wworld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel16)
                                    .addComponent(wid, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel18))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jLabel2)
                                    .addComponent(jLabel3)
                                    .addComponent(jButton1)
                                    .addComponent(exprate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jButton17)))
                            .addComponent(jButton16))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(droprate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel5)
                            .addComponent(jButton2)
                            .addComponent(jButton18))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(9, 9, 9)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jLabel6)
                                    .addComponent(mesorate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel7)
                                    .addComponent(jButton4)))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton19)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel8)
                                .addGap(3, 3, 3)
                                .addComponent(jLabel10))
                            .addComponent(jButton15))
                        .addGap(7, 7, 7)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(servermessage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jButton5))
                        .addGap(1, 1, 1)
                        .addComponent(jLabel11)
                        .addGap(4, 4, 4)
                        .addComponent(noticeContent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jButton6)
                            .addComponent(jButton7)
                            .addComponent(jButton10)
                            .addComponent(jButton11)
                            .addComponent(jButton8))
                        .addGap(6, 6, 6)
                        .addComponent(jLabel22))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel9)
                                .addGap(6, 6, 6)
                                .addComponent(jLabel12)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addComponent(jButton13)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(jButton12)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jButton14)
                                        .addGap(18, 18, 18)
                                        .addComponent(jButton3)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(beAdd, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(badd2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jButton20))
                                .addGap(30, 30, 30)
                                .addComponent(jLabel15))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel17)
                                .addGap(10, 10, 10)
                                .addComponent(jButton22)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton24, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton23)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jButton21)
                            .addComponent(jButton9))))
                .addGap(8, 8, 8)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(23, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("通用", jPanel1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel14, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel14)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        String element = beAdd.getText();
        String count = badd2.getText();
        //String[] entry = element.split(",");
        //entry[0] = entry[0].trim();
        //entry[1] = entry[1].trim();
        int itemId = 0;
        short quantity = -1;
        boolean s = false;
        try {
            itemId = Integer.valueOf(element);
            quantity = Short.valueOf(count);
            s = true;
        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, "请重新输入.");
        }
        if (s) {
            itemListModel.addElement(itemId + ", " + quantity);
            itemList.setModel(itemListModel);
        } else {
            JOptionPane.showMessageDialog(null, "出错");
        }

    }//GEN-LAST:event_jButton3ActionPerformed

    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton10ActionPerformed
        sendNotice(4);
    }//GEN-LAST:event_jButton10ActionPerformed

    private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton11ActionPerformed
        sendNotice(5);
    }//GEN-LAST:event_jButton11ActionPerformed

    private void jButton18ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton18ActionPerformed
        MapleShopFactory.getInstance().clear();
        JOptionPane.showMessageDialog(null, "商店初始化成功...");
    }//GEN-LAST:event_jButton18ActionPerformed

    private void jButton19ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton19ActionPerformed
        for (ChannelServer instance : ChannelServer.getAllInstances()) {
            instance.reloadEvents();
        }
        JOptionPane.showMessageDialog(null, "Event 脚本初始化成功...");
    }//GEN-LAST:event_jButton19ActionPerformed

    private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton16ActionPerformed
        //MapleMonsterProvider.getInstance().clearDrops();
        ReactorScriptManager.getInstance().clearDrops();
        JOptionPane.showMessageDialog(null, "物品掉落初始化成功....");
    }//GEN-LAST:event_jButton16ActionPerformed

    private void jButton17ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton17ActionPerformed
        PortalScriptManager.getInstance().clearScripts();
        JOptionPane.showMessageDialog(null, "Portal 脚本初始化成功...");
    }//GEN-LAST:event_jButton17ActionPerformed

//GEN-FIRST:event_jButton12ActionPerformed
    private void jButton12ActionPerformed(java.awt.event.ActionEvent evt) {
        itemListModel.remove(itemList.getSelectedIndex());
        itemList.setModel(itemListModel);
    }
//GEN-LAST:event_jButton12ActionPerformed

    private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton14ActionPerformed
        itemListModel = new DefaultListModel();
        itemList.setModel(itemListModel);

    }//GEN-LAST:event_jButton14ActionPerformed

    private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton13ActionPerformed
        List<Pair<Integer, Short>> itemEntries = new ArrayList<>();
        try {
            for (Object elementObj : itemListModel.toArray()) {
                String str = (String) elementObj;
                String[] entry = str.split(",");
                if (str.equals("< 项目, 数量 >")) {
                    JOptionPane.showMessageDialog(null, "错误:请添加项目!.");
                    return;
                }
                entry[0] = entry[0].trim();
                entry[1] = entry[1].trim();
                itemEntries.add(new Pair<>(Integer.valueOf(entry[0]), Short.valueOf(entry[1])));
            }
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, "项目列表有错.");
            return;
        }
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            cserv.broadcastPacket(MaplePacketCreator.serverMessageRedText("恭喜！获得了管理员赠送的礼物。"));
            for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) {
                for (Pair<Integer, Short> itemEntry : itemEntries) {
                    player.gainItem(itemEntry.getLeft(), itemEntry.getRight(), false, -1, "服务端控制台发送物品");
                }
            }
        }
    }//GEN-LAST:event_jButton13ActionPerformed

    private void jButton22ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton22ActionPerformed
        int users = 0;
        for (ChannelServer csev : ChannelServer.getAllInstances()) {
            users += csev.getPlayerStorage().getAllCharacters().size();
        }
        JOptionPane.showMessageDialog(null, "在线玩家数 : " + users);
    }//GEN-LAST:event_jButton22ActionPerformed

    private void jButton21ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton21ActionPerformed
        String val_item = jTextField1.getText(); //物品ID
        String val_quan = jTextField2.getText(); //数量
        int val_targ;//目标 角色名
        if (jTable1.getSelectedRow() != -1) {
            val_targ = (Integer) ManagerSin.jTable1.getValueAt(jTable1.getSelectedRow(), 0);
        } else {
            JOptionPane.showMessageDialog(null, "您未选择角色。");
            return;
        }

        int item;
        short quan = 0;
        try {
            item = Integer.parseInt(val_item);
            quan = Short.parseShort(val_quan);
        } catch (NumberFormatException e) {
            item = 0;
        }
        if (val_targ < 0 || item < 1 || quan < 1) {
            JOptionPane.showMessageDialog(null, "Debug:错误！");
            return;
        }
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            //cserv.broadcastPacket(NPCPacket.getNPCTalk(2007, (byte) 0, "获得了管理员赠送的礼物。", "00 00", (byte) 0));
            //cserv.broadcastPacket(MaplePacketCreator.serverNotice(1, "恭喜！获得了管理员赠送的礼物。"));
            for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) {
                if (val_targ == player.getClient().getAccID()) {
                    player.gainItem(item, quan, false, -1, "服务端控制台发送物品");
                    player.getClient().getSession().write(MaplePacketCreator.serverMessageRedText("恭喜！获得了运营员赠送的礼物。"));
                }
            }
        }
        //MapleCharacter.gainReward(val_targ, item, quan);
        JOptionPane.showMessageDialog(null, "奖励发放成功。.");
    }//GEN-LAST:event_jButton21ActionPerformed

    private void jButton24ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton24ActionPerformed
        minutesLeft = 2;
        if (ts == null && (t == null || !t.isAlive())) {
            t = new Thread(ShutdownServer.getInstance());
            ts = Timer.EventTimer.getInstance().register(new Runnable() {
                @Override
                public void run() {
                    if (minutesLeft == 0) {
                        ShutdownServer.getInstance().shutdown();
                        t.start();
                        ts.cancel(false);
                        return;
                    }
                    WorldBroadcastService.getInstance().broadcastMessage(MaplePacketCreator.serverMessageNotice("服务器将在" + minutesLeft + "分钟后进行停机维护, 请及时安全下线, 以免造成不必要的损失"));
                    minutesLeft--;
                }
            }, 60000);
            JOptionPane.showMessageDialog(null, "服务器将在" + minutesLeft + "分钟后关闭！");
        } else {
            JOptionPane.showMessageDialog(null, "关闭进程正在进行或者关闭已完成, 请稍候");
        }

    }//GEN-LAST:event_jButton24ActionPerformed

    private void jButton23ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton23ActionPerformed
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            //cserv.saveAllMerchant();
            for (MapleCharacter hp : cserv.getPlayerStorage().getAllCharacters()) {
                hp.saveToDB(false, false);
            }
        }
        //MedalRanking.getInstance().save();
        JOptionPane.showMessageDialog(null, "保存完毕.");

    }//GEN-LAST:event_jButton23ActionPerformed

    /* 消息处理 */
    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
        sendNotice(0);
    }//GEN-LAST:event_jButton6ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
        modifyServer(3, servermessage.getText());
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
        sendNotice(1);
    }//GEN-LAST:event_jButton7ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        //modifyServer(1, droprate.getText());
        int ee = wworld.getSelectedIndex();
        drop[ee] = Integer.parseInt(droprate.getText());
        sendNotice("物品爆率已经改变,现在为 " + drop[ee] + " 倍!");
    }//GEN-LAST:event_jButton2ActionPerformed

    /* 修改暴率 */
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        //modifyServer(0, exprate.getText());
        int ee = wworld.getSelectedIndex();
        exp[ee] = Integer.parseInt(exprate.getText());
        sendNotice("经验倍率已经改变,现在为 " + exp[ee] + " 倍!");
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
        //modifyServer(2, mesorate.getText());
        int ee = wworld.getSelectedIndex();
        meso[ee] = Integer.parseInt(mesorate.getText());
        sendNotice("金币爆率已经改变,现在为 " + meso[ee] + " 倍!");
    }//GEN-LAST:event_jButton4ActionPerformed

    private void wworldItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_wworldItemStateChanged
        int index = wworld.getSelectedIndex();
        //FileoutputUtil.log(index);
        wid.getItemAt(index);
        exprate.setText(exp[index] + "");
        mesorate.setText(meso[index] + "");
        droprate.setText(drop[index] + "");
    }//GEN-LAST:event_wworldItemStateChanged

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        chatlog.setText("");
    }//GEN-LAST:event_jButton8ActionPerformed

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton9ActionPerformed
        int val_targ;
        if (jTable1.getSelectedRow() != -1) {
            val_targ = (Integer) jTable1.getValueAt(jTable1.getSelectedRow(), 0); //目标 角色名
        } else {
            JOptionPane.showMessageDialog(null, "您未选择角色。");
            return;
        }
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) {
                if (val_targ == player.getClient().getAccID()) {
                    player.getClient().getSession().write(MaplePacketCreator.serverMessagePopUp("[通知] 你已经被运营员强制踢下线！"));
                    player.getClient().disconnect(true, player.getClient().getChannel() == -10);
                    player.getClient().getSession().close(true);
                    break;
                }
            }
        }
    }//GEN-LAST:event_jButton9ActionPerformed

    private void jButton15ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton15ActionPerformed
        SendPacketOpcode.reloadValues();
        RecvPacketOpcode.reloadValues();
        InteractionOpcode.reloadValues();
        CashShopOpcode.reloadValues();
        JOptionPane.showMessageDialog(null, "已重置包头。");
    }//GEN-LAST:event_jButton15ActionPerformed

    private void jButton20ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton20ActionPerformed
        try {
            int count = Integer.parseInt(badd2.getText());
            for (ChannelServer cserv : ChannelServer.getAllInstances()) {
                cserv.broadcastPacket(MaplePacketCreator.serverMessageRedText("恭喜！获得了管理员赠送的 " + count + " 点卷!"));
                for (MapleCharacter player : cserv.getPlayerStorage().getAllCharacters()) {
                    player.modifyCSPoints(1, count);
                }
            }
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(null, "错误!\r\n" + e);
        }
    }//GEN-LAST:event_jButton20ActionPerformed

    protected static Thread t = null;
    private static ScheduledFuture<?> ts = null;
    private int minutesLeft = 0;

    private void setData() {
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            //TODO: Handle this for 118
            //exprate.setText(cserv.getExpRate() + "");
            // droprate.setText(cserv.getDropRate() + "");
            //mesorate.setText(cserv.getMesoRate() + "");
            //servermessage.setText(cserv.getServerMessage());
            //chatlog.setText("");
            break;
        }
    }

    private void setworld() {
        int i = 0;
        for (WorldConstants.Option e : WorldConstants.values()) {
            if (e.show()) {
                String mWorld = e.name();
                wworld.addItem(mWorld);
                wid.addItem(e.getWorld());
                //wcode.addItem(e.getWorld());
                exp[i] = e.getExp();
                meso[i] = e.getMeso();
                drop[i] = e.getDrop();
                //wid[i] = e.getWorld();
                i += 1;
                //break;
            }
        }

        wworldItemStateChanged(null);
    }

    private void modifyServer(int type, String str) {
        try {
            for (ChannelServer cserv : ChannelServer.getAllInstances()) {
                switch (type) {
                    //TODO: fix this
                    case 0:
                        //cserv.setExpRate(Integer.valueOf(str));
                        break;
                    case 1:
                        //cserv.setDropRate(Integer.valueOf(str));
                        break;
                    case 2:
                        //cserv.setMesoRate(Byte.valueOf(str));
                        break;
                    case 3:
                        //cserv.setServerMessage(str);
                        break;
                }
            }
            setData();
            JOptionPane.showMessageDialog(null, "成功修改设置。");
        } catch (HeadlessException e) {
            JOptionPane.showMessageDialog(null, "错误!\r\n" + e);
        }
    }
    /* 修改暴率结束 */

    private void sendNotice(String str) {
        for (ChannelServer cserv : ChannelServer.getAllInstances()) {
            cserv.broadcastPacket(MaplePacketCreator.serverMessageNotice("[公告事项] " + str));
        }
    }

    private void sendNotice(int type) {
        try {
            String str = noticeContent.getText();
            byte[] p = null;
            switch (type) {
                case 0:
                    p = MaplePacketCreator.serverMessageNotice("[公告事项] " + str);
                    break;
                case 1:
                    p = MaplePacketCreator.serverMessageRedText("[来自运营员的消息] \n\r\n\r" + str);
                    break;
                case 2:
                    //p = MainPacketCreator.getGMText(8, str);
                    break;
                case 3:
                    //p = UIPacket.showInfo(str);
                    break;
                case 4:
                    p = MaplePacketCreator.serverNotice(5, str);
                    break;
                case 5:
                    p = NPCPacket.sendNPCSay(2007,str);
            }
            for (ChannelServer cserv : ChannelServer.getAllInstances()) {
                cserv.broadcastPacket(p);
            }
            if (type == 0) {
                chatlog.setText(chatlog.getText() + "[公告事项] " + str + "\n");
            }

            //JOptionPane.showMessageDialog(null, "通知完成。.");
            noticeContent.setText("");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "错误!\r\n" + e);
        }
    }
    /* 消息处理 结束 */
    /* 活动处理结束 */

    /**
     * @param args the command line arguments
     */
    public static void main(final boolean args) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ManagerSin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                if (args) {
                    new ManagerSin().setVisible(true);
                } else {
                    new ManagerSin().setVisible(false);
                }
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField badd2;
    private javax.swing.JTextField beAdd;
    public static javax.swing.JTextPane chatlog;
    private javax.swing.JTextField droprate;
    private javax.swing.JTextField exprate;
    private javax.swing.Box.Filler filler1;
    private javax.swing.JList itemList;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton10;
    private javax.swing.JButton jButton11;
    private javax.swing.JButton jButton12;
    private javax.swing.JButton jButton13;
    private javax.swing.JButton jButton14;
    private javax.swing.JButton jButton15;
    private javax.swing.JButton jButton16;
    private javax.swing.JButton jButton17;
    private javax.swing.JButton jButton18;
    private javax.swing.JButton jButton19;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton20;
    private javax.swing.JButton jButton21;
    private javax.swing.JButton jButton22;
    private javax.swing.JButton jButton23;
    private javax.swing.JButton jButton24;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel17;
    private javax.swing.JLabel jLabel18;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel22;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JTabbedPane jTabbedPane1;
    public static javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField mesorate;
    private javax.swing.JTextField noticeContent;
    private javax.swing.JTextField servermessage;
    private javax.swing.JComboBox wid;
    private javax.swing.JComboBox wworld;
    // End of variables declaration//GEN-END:variables
    private DefaultListModel itemListModel = new DefaultListModel();
}
